/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aqu.controlador.CuentasPorCobrar;

import aqu.bean.generico.BeanGenerico;
import aqu.persistencia.Dao.Contabilidad.ConCuentaManager;
import aqu.persistencia.Dao.CuentasPorCobrar.CxcClienteManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpTipoContribuyenteManager;
import aqu.persistencia.entity.ConCuenta;
import aqu.persistencia.entity.CxcCliente;
import aqu.persistencia.entity.CxpTipoContribuyente;
import aqu.persistencia.utilidad.MessagesController;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author Verito Ramirez
 *         Victor Jaramillo
 */
@ManagedBean(name = "clienteController")
@ViewScoped
public class ClienteController extends BeanGenerico {

    private CxcCliente cliente, clienteAux;
    private ConCuenta cuenta;
    private CxpTipoContribuyente tipoContribuyente;
    private List<CxcCliente> listaClientes, listaCliAux;
    private List<ConCuenta> listaCuentas;
    private List<CxpTipoContribuyente> listaTipoContribuyente;
    private CxcClienteManager clienteManager = new CxcClienteManager();
    private ConCuentaManager cuentaManager = new ConCuentaManager();
    private CxpTipoContribuyenteManager tipoContribuyenteManager = new CxpTipoContribuyenteManager();
    private boolean panelvisible;
   
    public ClienteController() {

       cliente = new CxcCliente();
       clienteAux = new CxcCliente();
       cuenta = new ConCuenta();
       tipoContribuyente=new CxpTipoContribuyente();
       
       listaCuentas = cuentaManager.getList();
       listaTipoContribuyente = tipoContribuyenteManager.getList();
       listaClientes = clienteManager.getListOrdenado("cxcNombreCli");
       listaCliAux = clienteManager.getListOrdenado("cxcNombreCli");
    }

    public List<CxcCliente> getListaCliAux() {
        listaCliAux = clienteManager.getListOrdenado("cxcNombreCli");
        return listaCliAux;
    }

    public void setListaCliAux(List<CxcCliente> listaCliAux) {
        this.listaCliAux = listaCliAux;
    }

    
    public CxcCliente getClienteAux() {
        return clienteAux;
    }

    public void setClienteAux(CxcCliente clienteAux) {
        this.clienteAux = clienteAux;
    }

    public ConCuenta getCuenta() {
        return cuenta;
    }

    public void setCuenta(ConCuenta cuenta) {
        this.cuenta = cuenta;
    }

    public ConCuentaManager getCuentaManager() {
        return cuentaManager;
    }

    public void setCuentaManager(ConCuentaManager cuentaManager) {
        this.cuentaManager = cuentaManager;
    }

    public List<ConCuenta> getListaCuentas() {
        listaCuentas = cuentaManager.getListOrdenado("conCodigoCue");
        return listaCuentas;
    }

    public void setListaCuentas(List<ConCuenta> listaCuentas) {
        this.listaCuentas = listaCuentas;
    }



    public List<CxpTipoContribuyente> getListaTipoContribuyente() {
        listaTipoContribuyente = tipoContribuyenteManager.getList();
        return listaTipoContribuyente;
    }

    public void setListaTipoContribuyente(List<CxpTipoContribuyente> listaTipoContribuyente) {
        this.listaTipoContribuyente = listaTipoContribuyente;
    }

    public CxcCliente getCliente() {
        return cliente;
    }

    public void setCliente(CxcCliente cliente) {
        this.cliente = cliente;
    }

    public CxcClienteManager getClienteManager() {
        return clienteManager;
    }

    public void setClienteManager(CxcClienteManager clienteManager) {
        this.clienteManager = clienteManager;
    }

    public List<CxcCliente> getListaClientes() {
        String parametro = "-";
        if(clienteAux.getCxcCodigoCli() != null)
            parametro = clienteAux.getCxcCodigoCli();
        if(!parametro.equals("-"))
            listaClientes=clienteManager.buscarporCliente(clienteAux);
        else
            listaClientes = clienteManager.getListOrdenado("cxcNombreCli");
        return listaClientes;
    }

    public void setListaClientes(List<CxcCliente> listaClientes) {
        this.listaClientes = listaClientes;
    }

   
    public CxpTipoContribuyente getTipoContribuyente() {
        return tipoContribuyente;
    }

    public void setTipoContribuyente(CxpTipoContribuyente tipoContribuyente) {
        this.tipoContribuyente = tipoContribuyente;
    }

    public CxpTipoContribuyenteManager getTipoContribuyenteManager() {
        return tipoContribuyenteManager;
    }

    public void setTipoContribuyenteManager(CxpTipoContribuyenteManager tipoContribuyenteManager) {
        this.tipoContribuyenteManager = tipoContribuyenteManager;
    }
    
    
    public boolean isPanelvisible() {
        return panelvisible;
    }

    public void setPanelvisible(boolean panelvisible) {
        this.panelvisible = panelvisible;
    }

    public void llamarPanelvisible(ActionEvent event) {
        panelvisible = !panelvisible;
    }

    public void nuevo(ActionEvent actionEvent) {
        cliente = new CxcCliente();
    }

    public String eliminar() {
        try {
            CxcCliente ClienteTemp = (CxcCliente) (cliente);
            if (clienteManager.delete(ClienteTemp) == false) {
                llamarPanelvisible(null);
            }
            cliente = new CxcCliente();
            cuenta = new ConCuenta();
            tipoContribuyente = new CxpTipoContribuyente();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
        return "index";
    }

    public void insertar(ActionEvent actionEvent) {
        try {
            cliente.setCxcCodigoCli(MessagesController.obtenerkeyautomaticosinceros("cxc_cliente", "CXC_CODIGO_CLI"));            
            cliente.setConCodigoCue(cuenta);
            cliente.setCxpCodigoTipCon(tipoContribuyente);
            if (clienteManager.create(cliente) == false) {
                llamarPanelvisible(null);
            }
            cliente = new CxcCliente();
//            cuenta = new ConCuenta();
//            tipoContribuyente = new CxpTipoContribuyente();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }

    public void modificar(ActionEvent actionEvent) {
        try {
            if (clienteManager.update(cliente) == false) {
                llamarPanelvisible(null);
            }
            cliente = new CxcCliente();
            cuenta = new ConCuenta();
            tipoContribuyente = new CxpTipoContribuyente();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }

    public void rowSelectionListener(RowSelectorEvent event) {
        cliente = listaClientes.get(event.getRow());
        switchCuenta(cliente);
        switchTipContribuyente(cliente);
         
        
    }   
    
     public void switchCuenta(CxcCliente cliente) {
        cuenta=cliente.getConCodigoCue();
    }
    
    public void switchTipContribuyente(CxcCliente cliente){
        tipoContribuyente = cliente.getCxpCodigoTipCon();
    }
}